Convertendo DataTable em List
Como converter um DataTable em um List
Compartilho com vocês um extension que é para converter um DataTable em um List.
A função irá percorrer as propriedades de uma classe procurando se ela existe no datatable considerando seu nome ou a informação que está no 'DescriptionAttribute'.
public static List<T> ToListOf<T>(this DataTable dt)
{
const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
//Pega o nome das colunas retornadas no DataTable
var columnNames = dt.Columns.Cast<DataColumn>().Select(c => c.ColumnName).ToList();
//Pega as propriedades da classe que será retornada no list
var objectProperties = typeof(T).GetProperties(flags);
var targetList = dt.AsEnumerable().Select(dataRow =>
{
//Cria uma intancia da classe a ser retornada
var instanceOfT = Activator.CreateInstance<T>();
//Percorre as propriedades
foreach (var properties in objectProperties)
{
//Nome de pesquisa da coluna no datatable se inicia com o nome da propriedade
var propertyName = properties.Name;
//Verifica se a propriedade possui um 'DescriptionAttribute' na qual é o nome da coluna no DataTable
var property = properties.GetCustomAttributes(typeof(DescriptionAttribute), true).FirstOrDefault();
//Caso encontre esse é o nome da coluna na qual será obtido o valor
if (property != null)
propertyName = ((DescriptionAttribute)property).Description;
//Somente faz atribuição caso tenha algum valor
if ((!columnNames.Contains(propertyName)) || (dataRow[propertyName] == DBNull.Value))
continue;
//Atribui o valor da coluna no objeto instanciado acima
properties.SetValue(instanceOfT, dataRow[propertyName], null);
}
return instanceOfT;
}).ToList();
return targetList;
}
Eu te vejo no próximo artigo.
Veja Também:
Artigos Relacionados
Olá, deixe seu comentário para Convertendo DataTable em List